﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using QuanLyTiemVang.DAO;
using QuanLyTiemVang.Classes;
using QuanLyTiemVang.BUS;

namespace QuanLyTiemVang.GUI
{
    /// <summary>
    /// Interaction logic for PhieuNo.xaml
    /// </summary>
    public partial class PhieuNo : Window, IPhanQuyenHelper
    {
        bool isInitialize = true;
        bool isPhieuNoForBanHang = true;

        public decimal SoTienTra
        {
            set
            {
                if (value >= 0)
                {
                    decimal x = value;
                    this.txtSoTienTra.Text = x.ToString();
                    isInitialize = false;
                }
            }
        }

        private int maKhachHang;
        public int MaKhachHang
        {
            set
            {
                if (value > 0)
                {
                    maKhachHang = value;
                    KHACHHANG kh = KhachHangDAO.SelectKhachHangByMaKhachHang((int)value);
                    this.txtMaKhachHang.Text = kh.MaKhachHang.ToString();
                    this.txtTenKhachHang.Text = kh.TenKhachHang;
                    this.txtSoTienNo.Text = kh.TienNoHienTai.ToString();
                    this.txtLoaiKhachHang.Text = kh.LOAIKHACHHANG.TenLoaiKhachHang;

                    decimal x;
                    if (decimal.TryParse(this.txtSoTienTra.Text, out x) && decimal.TryParse(this.txtSoTienNo.Text, out x))
                    {
                        this.txtSoTienConLai.Text = (decimal.Parse(this.txtSoTienNo.Text) - decimal.Parse(this.txtSoTienTra.Text)).ToString();
                    }
                }
                else
                {
                    this.txtMaKhachHang.Text = "";
                    this.txtTenKhachHang.Text = "";
                    this.txtSoTienNo.Text = "0";
                    this.txtLoaiKhachHang.Text = "";
                    this.txtSoTienConLai.Text = "0";
                }
            }

            get
            {
                return maKhachHang;
            }
        }
        public void SetPhieuNoForBanHang(bool value)
        {
            this.isPhieuNoForBanHang = value;
            if (value == true)
            {
                this.txtSoTienTra.IsEnabled = false;
                this.cbMaKhachHang.IsEnabled = false;
                this.cbMaKhachHang.ItemsSource = null;
                this.cbMaKhachHang.Visibility = System.Windows.Visibility.Collapsed;
                this.txtMaKhachHang.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                this.txtSoTienTra.IsEnabled = true;
                this.cbMaKhachHang.IsEnabled = true;
                this.cbMaKhachHang.ItemsSource = KhachHangDAO.GetAllKhachQuenId();
                this.cbMaKhachHang.Visibility = System.Windows.Visibility.Visible;
                this.txtMaKhachHang.Visibility = System.Windows.Visibility.Collapsed;
            }
        }
        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonDown(e);

            // Begin dragging the window
            this.DragMove();
        }
        public PhieuNo()
        {
            InitializeComponent();
            CurrentUser.Instance.AddForm(this);

            this.ClearAll();

            this.dpNgayNo.SelectedDate = DateTime.Now.Date;
            this.dpNgayNo.IsEnabled = false;
        }

        private void txtSoTienTra_TextInput_1(object sender, TextCompositionEventArgs e)
        {
            decimal result;
            if (!(decimal.TryParse(e.Text, out result)))
            {
                e.Handled = true;
            }
        }

        private void txtSoTienTra_LostFocus_1(object sender, RoutedEventArgs e)
        {
            if (isInitialize)
                return;

            decimal x;
            if (decimal.TryParse(txtSoTienNo.Text, out x) && decimal.TryParse(txtSoTienTra.Text, out x))
            {
                txtSoTienConLai.Text = (decimal.Parse(txtSoTienNo.Text) - decimal.Parse(txtSoTienTra.Text)).ToString();
            }
        }

        private void txtSoTienTra_TextChanged_1(object sender, TextChangedEventArgs e)
        {
            if (isInitialize)
                return;


            decimal result;
            if (decimal.TryParse(this.txtSoTienNo.Text, out result) && decimal.TryParse(this.txtSoTienTra.Text, out result))
            {
                if (decimal.Parse(this.txtSoTienTra.Text) > decimal.Parse(this.txtSoTienNo.Text))
                {
                    this.txtSoTienTra.Text = this.txtSoTienNo.Text;
                    this.txtSoTienTra.Select(this.txtSoTienTra.Text.Length, 0);
                }

                this.txtSoTienConLai.Text = (decimal.Parse(this.txtSoTienNo.Text) - decimal.Parse(this.txtSoTienTra.Text)).ToString();
            }
        }

        private void btnTaoPhieuMoi_Click(object sender, RoutedEventArgs e)
        {
            this.ClearAll();
        }

        private void ClearAll()
        {
            this.txtMaPhieuNo.Text = PhieuNoDAO.GetLastMaPhieuNo().ToString();
            this.txtMaKhachHang.Text = "";
            this.txtLoaiKhachHang.Text = "";
            this.txtSoTienNo.Text = "0";
            this.txtSoTienTra.Text = "0";
            this.txtTenKhachHang.Text = "";
            this.dpNgayTra.SelectedDate = null;
            this.cbMaKhachHang.SelectedIndex = -1;
            this.txtSoTienConLai.Text = "0";
        }

        //private void btnXoaPhieu_Click(object sender, RoutedEventArgs e)
        //{
        //    this.ClearAll();
        //}

        private void btnLapPhieu_Click(object sender, RoutedEventArgs e)
        {
            #region Kiểm tra điều kiện trước khi lập phiếu nợ
            if (txtSoTienTra.Text.Length < 0)
            {
                MessageBox.Show("Số tiền trả phải nhập tối thiểu là 1000 đồng.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            if (isPhieuNoForBanHang == false)
            {
                if (cbMaKhachHang.SelectedIndex == -1)
                {
                    MessageBox.Show("Chưa chọn khách hàng.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
            }

            decimal x;
            if (decimal.TryParse(this.txtSoTienTra.Text, out x) == false)
            {
                MessageBox.Show("Chưa nhập số tiền trả.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                this.txtSoTienTra.Focus();
                return;
            }

            if (this.dpNgayNo.SelectedDate == null)
            {
                MessageBox.Show("Chưa nhập ngày nợ.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                this.dpNgayNo.Focus();
                return;
            }

            if (this.dpNgayTra.SelectedDate == null)
            {
                MessageBox.Show("Chưa nhập ngày trả.", "Lỗi", MessageBoxButton.OK, MessageBoxImage.Error);
                this.dpNgayTra.Focus();
                return;
            }
            #endregion

            #region Lập phiếu
            PHIEUNO pn = new PHIEUNO();
            pn.NgayNo = this.dpNgayNo.SelectedDate;
            pn.NgayTra = this.dpNgayTra.SelectedDate;
            pn.SoTienTra = decimal.Parse(this.txtSoTienTra.Text);
            pn.TienConLai = decimal.Parse(this.txtSoTienConLai.Text);
            pn.MaKhachHang = Int32.Parse(this.txtMaKhachHang.Text);
            PhieuNoDAO.Insert(pn);

            KHACHHANG kh = KhachHangDAO.SelectKhachHangByMaKhachHang(MaKhachHang);
            kh.TienNoHienTai = decimal.Parse(this.txtSoTienConLai.Text);
            KhachHangDAO.UpdateTienNo(kh);

            #endregion

            MessageBoxResult result;
            result = MessageBox.Show("Lập phiếu thành công. Bạn có muốn in phiếu hay không?", "Thông báo", MessageBoxButton.YesNo, MessageBoxImage.Question);
            if (result == MessageBoxResult.No)
            {
                this.ClearAll();
                return;
            }

            System.Windows.Forms.SaveFileDialog sfd = new System.Windows.Forms.SaveFileDialog();
            sfd.Filter = "PDF File|*.pdf";
            sfd.FileName = "PN_" + this.txtMaPhieuNo.Text;
            System.Windows.Forms.DialogResult r = sfd.ShowDialog();
            if (r == System.Windows.Forms.DialogResult.Cancel)
            {
                this.ClearAll();
                return;
            }

            ReportBUS.PhieuNoReport(pn.MaPhieuNo, sfd.FileName);
            MessageBox.Show("Đã in phiếu thành công.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);

            this.ClearAll();
        }

        private void btnTraCuuKhachHang_Click(object sender, RoutedEventArgs e)
        {
            this.Visibility = Visibility.Hidden;
            TraCuuKhachHang tckh = new TraCuuKhachHang();
            tckh.ShowDialog();
            this.Visibility = Visibility.Visible;
        }

        private void dpNgayNo_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
        {
            if (this.dpNgayNo.SelectedDate.HasValue)
            {
                if (this.dpNgayNo.SelectedDate.Value.Date < DateTime.Now.Date)
                {
                    MessageBox.Show("Ngày nợ không được nhỏ hơn ngày hiện tại.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    this.dpNgayNo.SelectedDate = DateTime.Now.Date;
                }
            }
        }

        private void dpNgayTra_SelectedDateChanged_1(object sender, SelectionChangedEventArgs e)
        {
            if (this.dpNgayTra.SelectedDate.HasValue)
            {
                if (this.dpNgayNo.SelectedDate.HasValue)
                {
                    if (this.dpNgayTra.SelectedDate.Value.Date < this.dpNgayNo.SelectedDate.Value.Date)
                    {
                        MessageBox.Show("Ngày trả không được nhỏ hơn ngày nợ.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                        this.dpNgayTra.SelectedDate = this.dpNgayNo.SelectedDate;
                        return;
                    }
                }

                if (this.dpNgayTra.SelectedDate.Value.Date < DateTime.Now.Date)
                {
                    MessageBox.Show("Ngày trả không được nhỏ hơn ngày hiện tại.", "Thông báo", MessageBoxButton.OK, MessageBoxImage.Information);
                    this.dpNgayTra.SelectedDate = DateTime.Now.Date;
                }
            }
        }

        void IPhanQuyenHelper.SetAdminFunction()
        {
            //throw new NotImplementedException();
        }

        void IPhanQuyenHelper.SetStaffFunction()
        {
            //throw new NotImplementedException();
        }

        void IPhanQuyenHelper.SetCustomerFunction()
        {
            //throw new NotImplementedException();
        }

        void IPhanQuyenHelper.SetNonFunction()
        {
            this.Close();
        }

        private void btnThoat_Click_1(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void cbMaKhachHang_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
        {
            isInitialize = false;
            if (cbMaKhachHang.SelectedIndex != -1)
            {
                int value = (int)cbMaKhachHang.SelectedItem;
                maKhachHang = value;
                KHACHHANG kh = KhachHangDAO.SelectKhachHangByMaKhachHang((int)value);
                this.txtMaKhachHang.Text = kh.MaKhachHang.ToString();
                this.txtTenKhachHang.Text = kh.TenKhachHang;
                this.txtSoTienNo.Text = kh.TienNoHienTai.ToString();
                this.txtLoaiKhachHang.Text = kh.LOAIKHACHHANG.TenLoaiKhachHang;
                this.txtSoTienTra.Text = "0";

                decimal x;
                if (decimal.TryParse(this.txtSoTienTra.Text, out x) && decimal.TryParse(this.txtSoTienNo.Text, out x))
                {
                    this.txtSoTienConLai.Text = (decimal.Parse(this.txtSoTienNo.Text) - decimal.Parse(this.txtSoTienTra.Text)).ToString();
                }
            }
        }
    }
}
